package com.ucode.dcse.handler;

import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.ucode.dcse.TableCanalData;

import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;

/**
 * 策略模式实现的数据表数据处理器上下文
 * @author: liliang
 * @date: 2020年3月2日 下午9:12:05
 */
@Component
public class TableDataHandlerContext {
 
    private static Log log = LogFactory.get();
    
    private Map<String, TableDataHandler> tableDataHandlerMap;
    
    @Autowired
    public TableDataHandlerContext(Map<String, TableDataHandler> tableDataHandlerMap){
        this.tableDataHandlerMap = tableDataHandlerMap;
    }
    
//    @Bean(name="tableDataHandlerMap")
//    public Map<String, TableDataHandler> getTableDataHandlerMappingMap(){
//        return new HashMap<>();
//    }
//    
//    /**
//     * 注入Map
//     * @author ll
//     * @date 2020年3月2日
//     * @param contactsDataSyncHandler
//     * @param customerDataSyncHandler
//     * @return
//     * @desc
//     */
//    @Bean(name="tableDataHandlerMap")
//    public Map<String, TableDataHandler> getTableDataHandlerMappingMap(
//            @Qualifier("ucode_crm.crm_contacts") TableDataHandler contactsDataSyncHandler,
//            @Qualifier("ucode_crm.crm_customer") TableDataHandler customerDataSyncHandler){
//        Map<String, TableDataHandler> map = new HashMap<>();
//        map.put("ucode_crm.crm_contacts", contactsDataSyncHandler);
//        map.put("ucode_crm.crm_customer", customerDataSyncHandler);
//        return map;
//    }
    
    /**
     * 数据处理
     * @date 2020年3月2日
     * @param tableCanalData
     */
    public void handle(TableCanalData tableCanalData){
        String key = tableCanalData.getSchemaName()+"."+tableCanalData.getTableName();
        TableDataHandler tableDataHandler = tableDataHandlerMap.get(key);
        if(tableDataHandler != null)
            tableDataHandler.handle(tableCanalData);
        else
            log.error("canal 数据处理异常...,参数->schemaName:{},tableName->{}", tableCanalData.getSchemaName(),tableCanalData.getTableName());
    }
    
    /**
     * 数据表字段映射
     * @date 2020年3月3日
     * @return 如果映射Map为空,或者表字段找不到映射，则以数据库为准
     */
    public Map<String, String> getMapping(String schemaName,String tableName){
        String key = schemaName+"."+tableName;
        TableDataHandler tableDataHandler = tableDataHandlerMap.get(key);
        if(tableDataHandler == null){
            log.error("canal 数据处理获取mapping异常...,参数->schemaName:{},tableName->{}", schemaName,tableName);
            return null;
        }
        return tableDataHandler.getMapping();
        
    }
    
}
